package pl;
import java.util.ArrayList;
import java.util.Map;
import java.util.Iterator;


public class nodoModulo {

    int nivel;
    String nomModulo;  // nombre del modulo
    String cadena;
    String fi;
    ArrayList<asignacion> asignaciones;
    listaVariables variables;
    listaModulos modulos;
    boolean usado;  // por defecto, a false

    public nodoModulo(int nivel, String nomModulo, String cabecera) {
        this.nivel = nivel;
        this.cadena = cabecera;
        this.nomModulo = nomModulo;
        asignaciones = new ArrayList<asignacion>();
        variables = new listaVariables();
        modulos = new listaModulos();
        usado = false;
        fi = "";
    }

    public nodoModulo(int nivel, String cadena, String nomModulo, ArrayList<asignacion> asig, listaVariables var, listaModulos nod) {
        this.nivel = nivel;
        this.nomModulo = nomModulo;
        this.cadena = cadena;
        asignaciones = asig;
        variables = var;
        modulos = nod;
        fi ="";
    }

    public String obtenNomModulo() {
        return nomModulo;
    }

    public void estableceNomModulo(String nomModulo) {
        this.nomModulo = nomModulo;
    }

    public void estableceNivel(int nivel) {
        this.nivel = nivel;
    }

    public void estableceUtilizado(boolean uso) {
        this.usado = uso;
    }

    public void usa(TablaSimbolos tauleta) {
        Simbolo sim;
        Iterator i = tauleta.simbolos.entrySet().iterator();
        while (i.hasNext()) {
            Map.Entry me = (Map.Entry) i.next();
            sim = (Simbolo) (me.getValue());
            String si = me.getKey().toString();
            String nom = ((Simbolo) me.getValue()).nombre;
            if (tauleta.Emprat(nom)) {
                if (sim.esMETODO()) {
                    modulos.usa(nom);
                } else if (sim.esVAR()) {
                    variables.usa(sim.getNombre());
                }
            }
        }
    }
    public void setFi(String fi)
    {
        this.fi=fi;
    }


    @Override
    public String toString() {

        String retorno = "";
        if (usado) {
            retorno += cadena; // cadena aqui es la cabecera
            retorno += variables.toString();
            for (int i = 0; i < asignaciones.size(); i++) {
                retorno += asignaciones.get(i).toString();
            }
            retorno+=fi;
        }
        return (retorno);
    }
}
